package com.tedu.api.thread;

/**
 * 线程同步API:4
 * join   线程同步
 * 作用:允许一个线程在另外一个线程等待，执行完毕上一个线程，执行当前线程！
 *
 * join常用在线程协调之间同步操作!
 *
 * 同步运行：执行先后顺序
 * 同步运行:执行代码没有先后顺序，各自执行自己的代码块(多线程)
 * 线程---共享状态变量
 * 下载图片---1%--100%---单一流程:线程【下载完毕后】  显示图片
 */
public class Thread_join {
   //图片是否下载完毕，共享状态变量---线程同步|true完毕  反之没下载
   public static  boolean isFinish=false;

    public static void main(String[] args) {
        //创建下载线程  功能1%--100%  下载百分比
        System.out.println("快给我下载");
        //创建显示线程  功能：显示图片 下载完毕之后显示
        System.out.println("快给我显示");
        Thread man=new Thread(()->{
            for(int i=1;i<=100;i++){
                System.out.println("下崽"+i+"%");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }}
            isFinish=true;//到达100%  状态改为true 下载完毕
            System.out.println("准备显示一个靓仔...");
        });

        Thread kunkun=new Thread(()->{
            //2.在显示图片前,必须下载完毕
            try {
                man.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }//3.没有下崽完毕，---打开失败，主动给我抛出异常
            if(!isFinish){
                throw new RuntimeException("中途难产，似了");
            }
            System.out.println("下完崽子了");
        });
        kunkun.setDaemon(true);
        kunkun.start();
        man.start();
    }
}
